package API;

import java.math.BigInteger;
import java.util.Random;
import java.util.concurrent.atomic.AtomicReference;

public class Biginteger {

    //BigInteger<----大的整数
    //byte 1个字节
    //short 2个字节
    //int 4个字节
    //long 8个字节

  /*
    对象一旦创建，内部记录的值不能发生改变

    获取随机大整数，范围[0~2的num次方-1]
    public BigInteger(int num , Random rnd);
    获取指定的大整数
    public BigInteger(String val);
    获取指定进制的大整数
    public BigInteger(String val,int radix);
    静态方法获取BigInteger的对象，内部有优化
    public static BigInteger valueOf(long val);
  */
    /*
      BigInteger的方法
      public BigInteger add(BigInteger val);     加法
      public BigInteger subtract(BigInteger val);     减法
      public BigInteger multiply(BigInteger val);     乘法
      public BigInteger divide(BigInteger val);     除法（获取商）
      public BigInteger divideAndRemainder(BigInteger val);     除法（获取商和余数）
      public boolean    equals(BigInteger val);     比较是否相同
      public BigInteger pow(BigInteger val);     次幂
      public BigInteger max/min(BigInteger val);     返回较大值/较小值
      public int intValue(BigInteger val)        转为int类型整数，超出范围数据有误
     */

    public static void main(String[] args) {
        //获取一个随机的大整数
        Random r=new Random();
        BigInteger bd1=new BigInteger(4,r);//指的是[0~2的四次方-1]
        System.out.println(bd1);//[0~15]
        //获取指定的大整数
        BigInteger bd2=new BigInteger("100");
        System.out.println(bd2);
        //获取指定进制的大整数
        BigInteger bd3=new BigInteger("101",2);
        System.out.println(bd3);
        BigInteger bd4=new BigInteger("101",10);
        System.out.println(bd4);
        //静态方法获取BigInteger的对象，内部有优化
        //1.表示的范围有点小，在long的取值范围内
        //通过下行获取long的最大值
        // System.out.println(Long.MAX_VALUE);
        BigInteger bd5=BigInteger.valueOf(100);
        //2.在内部对常用数字 -16~16进行优化
        //即:提前将  -16~16先创建好，如果多次创建将不会增加新的对象
        BigInteger bd6=BigInteger.valueOf(16);
        BigInteger bd7=BigInteger.valueOf(16);
        System.out.println(bd6==bd7);//true
        BigInteger bd8=BigInteger.valueOf(17);
        BigInteger bd9=BigInteger.valueOf(17);
        System.out.println(bd8==bd9);//false

    }
}
